
package BUFE;

import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
import DTL.*;

/**
 * 
 * Classe destinée à gérer l'envoi d'e-mails
 */
public class MailManager {
    
    /**
     * Méthode destinée à envoyer un mail à l'équipe BMG afin que ses membres puissent gérer manuellement la commande
     * @param contenu définit le corps du texte du message
     * @throws MessagingException dans le cas où un problème surviendrait durant l'envoi de l'e-mail
     */
    public static void sendMailOrder (String contenu) throws MessagingException {
        try {
        Properties p = new Properties();
        p.put("mail.smtp.host", "smtp.gmail.com");
        p.put("mail.smtp.socketFactory.port", "465");
        p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        p.put("mail.smtp.auth", "true");
        p.put("mail.smtp.port", "465");
        Session session = Session.getDefaultInstance(p,
			new javax.mail.Authenticator() {
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication("projetbmg@gmail.com","projetbmgndt");
				}
			});
        //Construction du message
        Message m = new MimeMessage(session);
        m.setRecipients(Message.RecipientType.TO, InternetAddress.parse("projetbmg@gmail.com"));
        m.setSubject("Site Web BMG : Commande");
        m.setText(contenu);
        Transport.send(m);
        }
        catch (MessagingException e) {
            throw e;
        }
    }
    
    /**
     * Méthode destinée à formater le corps du mail contenant la liste des éléments de la commande
     * @param panier définit le contenu total des éléments du panier du client
     * @param nom définit le nom du client
     * @param prenom définit le prénom du client
     * @param tel définit le numéro de téléphone du client
     * @param email définit l'e-mail du client
     * @param adrFact définit l'adresse de facturation
     * @param adrLiv définit l'adresse de livraison
     * @param prixTotal définit le prix total de la commande
     * @return un texte formaté reprenant les éléments cités 
     */
    public static String orderContent (List<Panier_Entite> panier, String nom, String prenom, String tel, String email, String adrFact, String adrLiv, float prixTotal) {
        String message = "COMMANDE via le site web de Build More Green\n\n";
        for (Panier_Entite p : panier) {
            message += (p.getQuantite() + " x " + "   " + 
                    p.getUnProduit().getIntitule() + " (ID " + p.getUnProduit().getIdProduit() + ")" + "   " + 
                    p.getUnProduit().getPrix() + " euros\n");
        }
        message += ("Montant total : " + prixTotal + " euros\n");
        message += ("\nCLIENT\n" + prenom + " " + nom.toUpperCase() + "\n" +
                "Téléphone : " + tel + "\n" + 
                "E-mail : " + email + "\n");
        message += ("\nADRESSE DE FACTURATION\n" + adrFact + "\n");
        message += ("\nADRESSE DE LIVRAISON\n" + adrLiv + "\n");
        
        return message;
    }
    
    /**
     * Méthode destinée à envoyer par e-mail une copie de sa commande
     * @param commande définit le corps du texte du message relatif à la commande passée par le client
     * @param emailClient définit l'adresse e-mail du client
     * @throws MessagingException dans le cas où un problème surviendrait durant l'envoi de l'e-mail
     */
    public static void sendMailOrderACK (String commande, String emailClient) throws MessagingException {
        try {
        Properties p = new Properties();
        p.put("mail.smtp.host", "smtp.gmail.com");
        p.put("mail.smtp.socketFactory.port", "465");
        p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        p.put("mail.smtp.auth", "true");
        p.put("mail.smtp.port", "465");
        Session session = Session.getDefaultInstance(p,
			new javax.mail.Authenticator() {
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication("projetbmg@gmail.com","projetbmgndt");
				}
			});
        //Construction du message
        Message m = new MimeMessage(session);
        m.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailClient));
        m.setSubject("Votre commande chez Build More Green");
        String contenu = "Merci d'avoir passé une commande chez Build More Green!\n"
                + "Nous traiterons celle-ci dans les plus brefs délais.\n"
                + "Si vous n'avez pas passé commande chez nous, ou que celle-ci est incorrecte, merci de nous le signaler en répondant à ce mail.\n"
                + "Ci-après, voici un récapitulatif de votre commande.\n\n";
        contenu += commande;
        m.setText(contenu);
        Transport.send(m);
        }
        catch (MessagingException e) {
            throw e;
        }
    }
    
}
